xss [options] <polyh or xss file>
All these options can be abbreviated to the least letters needed to make the chosen option distinct.
Once running, it will display a few parameters and some help messages in the terminal window and create a graphics window with a wireframe model of objects given by the input file.
In xss, the three Cartesian axes are taken to be aligned horizontal (x - positive to the right), vertical (y - positive upward) and normal (z - positive toward the viewer) to the viewer.
There are four modes in xss. Three object modes - rotation, scaling and translation - and a rotation axis mode.
In the object modes, the current object is drawn in solid lines whilst the other objects are drawn in dashed lines. The current object can be rotated, translated, magnified or shrunk using either the keys specified below or the control panel. Additional objects and scenes can be loaded in and objects can be cloned or deleted as well.
In the rotation axis mode, a line appears which can be oriented in any direction. The line shows the rotation axis that will be used in xpgs. It is made of two halves, each drawn differently. The solid half is the northern part of the axis, the dashed half is the southern part. The rotation is defined to be clockwise as you look along the axis from the south pole northward.
Once satisfied with the scene you have composed, the configuration can be saved as a .xss file for use in xpgs, cvtoppm and sisgen.
Xss has a rather primitive user interface, partly because I haven't got round to learning to use Xt and some widget set.
There are two persistent windows in xss: the main graphics window and the control panel. The main window shows, on startup, four subwindows:
-----------------------------------
| | |
| ----> x | |
| | | |
| | | |
| v | |
| z | |
|-------------------|-------------|
| y | y |
| ^ | ^ |
| | | | |
| | | | |
| ----> x | z <---- |
| | |
-----------------------------------
The top right subwindow contains some information about the program, the .xss file name and the current object. The other subwindows display the three orthographic views (third angle projections?) which are front, right end and plan.
The objects can be drawn as wireframe figures or bounding boxes, with or without clipping. The clipping in the orthographic scheme is separately done in each view at the x=0, y=0 or z=0 plane.
The projection scheme be changed to a perspective one. In this scheme, there is only one view and hence only one window (no subwindows). Also clipping is done at the z=0 plane.
Both persistent windows are sensitive to key presses - as long as the cursor (or mouse pointer) is within their boundaries. See below for the keys.
Using the mouse in the main window is limited to popping up the help window which contains a reminder of the keys and their functions.
The control panel is where the mouse actions are most useful. This panel is divided into two types of mouse sensitive regions: the buttons and the mouse pad.
The popup window has three buttons which perform the following functions:
A number of keys are defined to facilitate editing (most a la emacs, hmm is that correct French?):
The pointer can also be used to move the text cursor: position the pointer to where you want the cursor to be then click one of the mouse buttons and release.
The dialogue popup also appears in vpgs and xpgs.
All buttons in the control panel are of the press and release variety. If you press button one of the mouse (usually the left button) in the "Clip" box and release whilst the pointer is still in that box then the action corresponding to "Clip" is performed.
Most buttons are single action devices but others are toggles which indicate the state of the program.
It has two appearances depending on the state of xss: a rotating state or a linear state. The rotating state is shown by a dashed sphere with three arrowed great circles and occurs when xss expects the action on the current object (or axis) to be a rotation. The linear state is depicted by a set of three arrowed mutually perpendicular axes and occurs when the anticipated action is a translation or scaling.
The line graphics are an isometric view of the sphere or the triad of axes with x and y directions going horizontally and vertically, respectively and the z direction, from positive to negative, goes from bottom left diagonally across to top right.
The square boxes within the mouse pad indicate the areas that are sensitive to mouse presses. Their positions in the mouse pad, in relation to the arrowed lines and curves, indicate the action to be taken when pressed. For example, in the rotating state, the rightmost square is configured to rotate the current object clockwise as it faces the viewer; in the linear state it is configured to translate the object right or magnify it horizontally.
The squares allow a click, hold, drag and release methodology (ugh). The further the pointer is released from the centre of the square it had click on, the more an action is performed - provided the pointer is released within the boundary of the mouse pad. As an aid, circles are drawn to help the user to gauge the magnitude of their action, they indicate the number of times a transformation will be performed.
The third (usually the right) mouse button acts like the first button but in actions where transformations are made, its effects are fivefold. The shift key can also be used in conjunction with the first mouse button to act like the third.
With the mouse pointer within the boundaries of the graphics window, xss will respond to a set of keypresses.
The manipulation keys are the cursor keys, the greater-than (or full stop or period) key and the less-than (or comma) key. They change the objects in a visually obvious way.
In rotation mode, (+ means clockwise about positive axis)
y axis: - Left + Right
z axis: + <, - >.
In translation mode,
y axis: + Up - Down
z axis: + <, - >.
In the rotation axis definition mode, the manipulations keys perform similar tasks to the rotation mode.
A number of builtin objects are now available. To access them, press the "l" key or "Load" button and type in a name (with parameters) instead of a .polyh file.
The following primitives are available:
The numbers in parentheses shown the default values taken by the program. When you use the primitives, you need not specify all the arguments, later values can be omitted (a la C++).
Also, there are a number of presets made from these primitives:
You should taken care when using these builtin objects because the parser is not too intelligent.
If you find any bugs, please report them to the author listed below.
cvtopolyh(6), cvtoppm(6), mkpolyh(6), sisgen(6), vpgs(6), xpgs(6) and xss(6).
Copyright 1994, 16th November and 14th February.
By Peter Chang. All rights reserved.
Version 2.0
See notice in the xpgs man page.